package com.liangsong.designpattern.strategy;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author liangsong
 * @version 1.0 2025/1/10
 * 1.策略环境类(Context)
 *  * 在初始化VideoContext对象时，将所有策略实现类塞进Map中，
 *  * key为视频类型（dy、ks、wx） value为对应的视频实现类
 *  * 通过getVideoStrategy方法，根据videoType从map中渠道对应的视频策略
 *  * 从而隐藏了策略的具体实现逻辑。这种方式可以遵循开闭原则，因为在新增视频类型时，只需要增加对应的实现类
 * */
public class VideoContext {
    private final Map<String, VideoStrategy> videoMap = new HashMap<>();

    public VideoContext(List<VideoStrategy> lists){
        for (VideoStrategy videostrategy:lists
             ) {
            String type = videostrategy.getVideoType();
            videoMap.put(type, videostrategy);
        }
    }

    public VideoStrategy getVideoStrategy(String type){
        VideoStrategy videoStrategy = videoMap.get(type);
        if (videoStrategy==null)
            throw new IllegalArgumentException("类型不正确");
        return videoStrategy;
    }
}
